MySQL ORDER BY
Home

MySQL ORDER BY

MySQL ORDER BY

De ORDER BY clausule voeg je aan een SELECT statement toe om de lijst te ordenen.

Probleem

Het is niet genoeg gegevens uit een tabel te kunnen opvragen, je moet ze ook kunnen sorteren of ordenen. We willen lijsten in alfanumerieke volgorde weergeven omdat het gemakkelijker is in een geordende lijst te zoeken.

Oplossing

Om te sorteren gebruiken we de clausule ORDER BY. Het sorteren kan op 2 manieren:

  1. oplopend
  2. aflopend

In het Engels is dat ascending en descending. In SQL wordt dat afgekort naar de clausules ASC en DESC. Stel dat je de namen uit de tabel boeken wil opvragen gesorteerd op de voornaam, de familienaam en titel van de boeken. De query ziet er dan zo uit:

use ModernWays;

-- oplopend sorteren volgens familienaam
-- ascending
select Voornaam, Familienaam, Titel from Boeken
   order by Familienaam asc, Voornaam, Titel;

-- aflopend sorteren volgens familienaam
-- descending
select Voornaam, Familienaam, Titel from Boeken
   order by Familienaam desc, Voornaam, Titel

Het eerste veld in de ORDER BY clause wordt dan eerst bekeken, dan het tweede, enzovoort. Als niet aangegeven is of de sortering voor een bepaald veld oplopend of aflopend is, is ze standaard oplopend. Dat wil zeggen dat als je ASC en DESC niet vermeldt na een kolom, de code zich gedraagt alsof er ASC staat.

De eerste bovenstaande SELECT clausule toont dus eerst boeken in alfabetische volgorde van de familienamen van de auteurs. Als twee auteurs dezelfde familienaam hebben, wordt hun voornaam gebruikt om de knoop door te hakken. Dan komt het boek met de voornaam die alfabetisch eerst komt ook eerst in de lijst. Als twee auteurs dezelfde naam hebben, of als het gewoon om twee boeken van dezelfde auteur gaat, wordt de titel gebruikt om de knoop door te hakken.

Voor de tweede query komen de familienamen met een 'Z' voor die met een 'A'. Let op: de voornamen met een 'A' komen wel voor de voornamen met een 'Z'!

Merk op uit bovenstaand voorbeeld: de volgorde van de kolommen in de ORDER BY clausule hoeft niet dezelfde te zijn als de volgorde van de weergave in de SELECT clausule. Het kan perfect zijn dat je wil sorteren op familienaam, maar wel eerst de voornaam wil tonen en dan pas de achternaam.

Oefening

Selecteer alle boeken volgens Verschijningsjaar te beginnen met het meest recente boek. Plaats je oplossing in een script 0046__BoekenSelect.sql.

Oefening

Selecteer verschijningsjaar, titel en auteur van alle boeken volgens verschijningsjaar te beginnen met het meest recente boek. Binnen elke verschijningsjaar zijn de familienamen alfabetisch geordend.

Sla het script op in 0047__BoekenSelect.sql

JI & VN

2019-03-23 17:20:37